package xalan.smartgwt.criteria;

import java.util.LinkedList;
import java.util.List;

/**
 * Złożone kryterium składające się z wielu kryteriów podrzędnych.
 * 
 * Przykładowo alternatywa (OR), koniunkcja (AND), zaprzeczenie (NOT).
 * 
 * @author Xalan
 */
public class AdvanceCriteria implements Criteria {
	private Operator operator;
	private List<Criteria> criteria = new LinkedList<Criteria>();
	
	public void addCriteria(Criteria criteria) {
		this.criteria.add(criteria);
	}
	
	public Operator getOperator() {
		return operator;
	}
	
	public void setOperator(Operator operator) {
		this.operator = operator;
	}
	
	public List<Criteria> getCriteria() {
		return criteria;
	}

	@Override
	public void visit(CriteriaVisitator visitator) {
		visitator.beforeVisitAdvanceCriteria(this);
		int childNumber = 0;
		for(Criteria c : criteria) {
			visitator.beforeChild(this, c, childNumber);
			c.visit(visitator);
			visitator.afterChild(this, c, childNumber);
			++childNumber;
		}
		visitator.afterVisitAdvanceCriteria(this);
	}

}
